<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <meta http-equiv="X-UA-Compatible" content="ie=edge">
    <title>Document</title>
</head>

<body>
    <script>
        var myObject = {
            foo: "bar",
            func: function () {
                var self = this;
                console.log(this.foo); //bar
                console.log(self.foo); //bar
                (function () {
                    console.log(this.foo); //undefined
                    console.log(self.foo); //bar
                }());
            }
        }
        myObject.func();
        //方法/函数是由谁(对象) 调用 的，方法/函数内部的 this 就指向谁(该对象)；

        // 注意： 被谁调用， 不是处于谁的作用域， 即使在作用域

        // 1、 func是由myObject调用的， this指向 myObject。

        // 2、 self指向myObject， 相当于 myObject的this的副本。

        // 3、 这个立即执行匿名函数表达式（ IIFE） 是由window调用的， this指向 window。

        // 4、 IIFE的作用域处于myObject.func的作用域中， 本作用域找不到self变量， 沿着作用域链向上查找self变量， 找到了指向 myObject对象的 self。
        // JS自执行函数又称为IIFE
    </script>
</body>

</html>